void RemoveBox(void);
void DisableBox(U8 _pth, U8 _box_num);
void SetBoxPln(U8 _pth, U8 _box_num, U8 _tgl);
void SetBoxBnd(U8 _pth, U8 _box_num, U8 _tgl);
void SetBoxMix(U8 _pth, U8 _box_num, U8 _tgl);
void SetBoxPos(U8 _box_num, U16 _boxhl, U16 _boxvt);
void SetBoxSize(U8 _box_num, U16 _boxhw, U16 _boxvw);
void SetBox(U8 _box_num, U16 _boxhl, U16 _boxhw, U16 _boxvt, U16 _boxvw);
void SetBoxPlaneSel(U8 box_start, U8 box_end, U8 col);

//==================================================================================
//						Box function description
//
//
//
//
//==================================================================================
void RemoveBox(void)
{
	DisableBox(PTH_X,BOX_POP_MN_HL);
	DisableBox(PTH_X,BOX_POP_MN);
	DisableBox(PTH_X,BOX_POP_SB_HL);
	DisableBox(PTH_X,BOX_POP_SB);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void DisableBox(U8 _pth, U8 _box_num)//, U8 _box_strt, U8 _box_end)//Disable the box plane area and boundary in display path (bit[1]bit[0])
{
//	U8	_rdat_;
//	U8 _t1_;
//
//	for(_t1_ = _box_strt ; _t1_ <= _box_end ; _t1_++){
//		_rdat_ = ReadAsicByte(MASTER,DVC_PG2,REG_BOXCTL+5*_t1_);
//		WriteAsicByte(MASTER,DVC_PG2,REG_BOXCTL+5*_t1_,(~ _pth) & _rdat_);
//	}

	if(BitSet(_pth,PTH_X))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT1|BIT0,0x00);
	if(BitSet(_pth,PTH_Y))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT4|BIT3,0x00);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBoxPln(U8 _pth, U8 _box_num, U8 _tgl)//U8 _box_strt, U8 _box_end)//Enable the box plane area in display path (bit[0])
{
//	U8	_rdat_;
//	U8 _t1_=0;
//
//	for(_t1_ = _box_strt ; _t1_ <= _box_end ; _t1_++){
//		_rdat_ = ReadAsicByte(MASTER,DVC_PG2,REG_BOXCTL+5*_t1_);
//		ClearBit(_rdat_,BOX_EN_X|BOX_EN_Y);
//		WriteAsicByte(MASTER,DVC_PG2,REG_BOXCTL+5*_t1_,_pth|_rdat_);
//	}

	if(BitSet(_pth,PTH_X))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT0,_tgl);
	if(BitSet(_pth,PTH_Y))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT3,_tgl<<3);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBoxBnd(U8 _pth, U8 _box_num, U8 _tgl) //U8 _box_strt, U8 _box_end, U8 boundary)//Enable the box boundary in display path (bit[1])
{	
	if(BitSet(_pth,PTH_X))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT1,_tgl<<1);
	if(BitSet(_pth,PTH_Y))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT4,_tgl<<4);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBoxMix(U8 _pth, U8 _box_num, U8 _tgl)//U8 _box_strt, U8 _box_end, U8 tgl_ht)
{                                                                            //Enable the alpha blending of box plane area in display path (bit[2])
//	U8	_rdat_;
//	U8	_t1_;
//
//	for(_t1_ = _box_strt ; _t1_ <= _box_end ; _t1_++){
//		_rdat_ = ReadAsicByte(MASTER,DVC_PG2,REG_BOXCTL+5*_t1_);
//		if(tgl_ht == ON)	SetBit(_rdat_,BOX_PLN_MIX);
//		else	ClearBit(_rdat_,BOX_PLN_MIX);
//		WriteAsicByte(MASTER,DVC_PG2,REG_BOXCTL+5*_t1_,_rdat_);
//	}
	if(BitSet(_pth,PTH_X))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT2,_tgl<<2);
	if(BitSet(_pth,PTH_Y))	SetAsicFlgType(MASTER,DVC_PG2,0x20+_box_num*6,BIT5,_tgl<<5);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBoxPos(U8 _box_num, U16 _boxhl, U16 _boxvt)
{
	U8	_rdat_;

	_rdat_ = ReadAsicByte(MASTER,DVC_PG2,0x21+_box_num*6);

	if(BitSet(_boxhl, BIT0))	SetBit(_rdat_, BIT3);
	else	ClearBit(_rdat_, BIT3);
	if(BitSet(_boxvt, BIT0))	SetBit(_rdat_, BIT1);
	else	ClearBit(_rdat_, BIT1);

	WriteAsicByte(MASTER,DVC_PG2,0x21+_box_num*6,_rdat_);
	WriteAsicByte(MASTER,DVC_PG2,0x22+_box_num*6,(U8)(_boxhl>>1));
	WriteAsicByte(MASTER,DVC_PG2,0x24+_box_num*6,(U8)(_boxvt>>1));
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBoxSize(U8 _box_num, U16 _boxhw, U16 _boxvw)
{
//	WriteAsicByte(MASTER,DVC_PG2,REG_BOXHW+5*_box_num,_boxhw);
//	WriteAsicByte(MASTER,DVC_PG2,REG_BOXVW+5*_box_num,_boxvw);

	U8	_rdat_;

	_rdat_ = ReadAsicByte(MASTER,DVC_PG2,0x21+_box_num*6);

	if(BitSet(_boxhw, BIT0))	SetBit(_rdat_, BIT2);
	else	ClearBit(_rdat_, BIT2);
	if(BitSet(_boxvw, BIT0))	SetBit(_rdat_, BIT0);
	else	ClearBit(_rdat_, BIT0);

	WriteAsicByte(MASTER,DVC_PG2,0x21+_box_num*6,_rdat_);
	WriteAsicByte(MASTER,DVC_PG2,0x23+_box_num*6,(U8)(_boxhw>>1));
	WriteAsicByte(MASTER,DVC_PG2,0x25+_box_num*6,(U8)(_boxvw>>1));

//	WriteAsicByte(MASTER,DVC_PG2,0x23+_box_num*6,_boxhw);
//	WriteAsicByte(MASTER,DVC_PG2,0x25+_box_num*6,_boxvw);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBox(U8 _box_num, U16 _boxhl, U16 _boxhw, U16 _boxvt, U16 _boxvw)
{
	SetBoxPos(_box_num,_boxhl,_boxvt);
	SetBoxSize(_box_num,_boxhw,_boxvw);
}

//==================================================================================
//
//
//
//
//
//==================================================================================
void SetBoxPlaneSel(U8 box_start, U8 box_end, U8 col)
{
	U8	t1, t_box_end;
	U8	r_boxctl;

	t_box_end = box_end + 1;
	for(t1 = box_start ; t1 < t_box_end ; t1++){
		r_boxctl = ReadAsicByte(MASTER,DVC_PG2,0x21+6*t1);
		r_boxctl = (r_boxctl & ~0xf0)|(col<<4);
		WriteAsicByte(MASTER,DVC_PG2,0x21+6*t1,r_boxctl);
	}
}
//==================================================================================

